/* ###################################### */
/* ###     Util Engine, by Kalith    ### */
/* ###################################### */
/*                                        */
/*                                        */

#ifndef Util_UTILS_MATH_H
#define Util_UTILS_MATH_H

#include "Types.h"

namespace Util
{
    // Int
    Float cos(const Int& iValue);
    Float acos(const Int& iValue);
    Float sin(const Int& iValue);
    Float asin(const Int& iValue);
    Float tan(const Int& iValue);
    Float atan(const Int& iValue);
    Float atan2(const Int& iY, const Int& iX);
    Int   fabs(const Int& iValue);
    Float pow(const Int& iValue, const Float& fValue);
    Double pow(const Int& iValue, const Double& dValue);
    Float sqrt(const Int& iValue);
    Float exp(const Int& iValue);

    // UInt
    Float cos(const UInt& uiValue);
    Float acos(const UInt& uiValue);
    Float sin(const UInt& uiValue);
    Float asin(const UInt& uiValue);
    Float tan(const UInt& uiValue);
    Float atan(const UInt& uiValue);
    Float atan2(const UInt& uiY, const UInt& uiX);
    Float pow(const UInt& uiValue, const Float& fValue);
    Double pow(const UInt& uiValue, const Double& dValue);
    Float sqrt(const UInt& uiValue);
    Float exp(const UInt& uiValue);

    // Float
    Float cos(const Float& fValue);
    Float acos(const Float& fValue);
    Float sin(const Float& fValue);
    Float asin(const Float& fValue);
    Float tan(const Float& fValue);
    Float atan(const Float& fValue);
    Float atan2(const Float& fY, const Float& fX);
    Float fabs(const Float& fValue);
    Float pow(const Float& fValue1, const Float& fValue2);
    Double pow(const Float& fValue, const Double& dValue);
    Float sqrt(const Float& fValue);
    Float exp(const Float& fValue);

    // Double
    Double cos(const Double& dValue);
    Double acos(const Double& dValue);
    Double sin(const Double& dValue);
    Double asin(const Double& dValue);
    Double tan(const Double& dValue);
    Double atan(const Double& dValue);
    Double atan2(const Double& dY, const Double& dX);
    Double fabs(const Double& dValue);
    Double pow(const Double& dValue1, const Double& dValue2);
    Double pow(const Double& dValue, const Float& fValue);
    Double sqrt(const Double& dValue);
    Double exp(const Double& dValue);
}

#endif
